<!--
  #%L
  BlaiseGraphTheory
  --
  Copyright (C) 2009 - 2014 Elisha Peterson
  --
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
  
       http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  #L%
  -->
<html>
    <title>Graph Theory Package (org.bm.blaise.scio.graph)</title>
    <body>
      <p>
          This package contains the primary classes for graphs, including interfaces
          and default implementations. The main interface is <code>Graph</code>, providing
          the standard API for working with graphs. The two most important implementations are
          <code>SparseGraph</code>, where the edges are encoded using lists, and <code>MatrixGraph</code>,
          where the edges are encoded using arrays.
      </p>
      <p>
          Standard graphs may be constructed using the methods in <code>GraphFactory</code>, and standard
          algortihms are contained in the <code>Graphs</code> class. Secondary classes can be used to generate
          other kinds of graphs: see <code>RandomGraph</code>, <code>DegreeRandomGraph</code>,
          <code>WattsStrogatzRandomGraph</code>, and <code>PreferentialAttachment</code>.
      </p>
      <p>
          <code>ContractedGraph</code> and <code>Subgraph</code> generate new graphs based on old ones by
          either contracting all nodes in a subset to a single node (in the first case), or by focusing only
          on a subset of nodes (in the second case).
      </p>
      <p>
          Secondary interfaces include <code>ValuedGraph</code> (vertices have associated values) and
          <code>WeightedGraph</code> (edges have associated values). Each of these
          interfaces has implementations as "wrappers" <code>ValuedGraphWrapper</code>,
          <code>WeightedGraphWrapper</code>, and <code>WeightedValuedGraphWrapper</code>.
      </p>
      <p>
          <i>Longitudinal graphs</i> are supported with the <code>LongitudinalGraph</code> interface,
          which provides a time domain, and each time within the domain gives a different "slice".
          There are two implementations of this: <code>ListLongitudinalGraph</code>, suitable for
          a list of graphs which occur at discrete times, and <code>IntervalLongitudinalGraph</code>,
          where a single graph is specified, and vertices/edges each have their own time domains.
      </p>
  </body>
</html>
